using UnityEngine;
using UnityEngine.Events;

/// <summary>
/// 自动添加 BoxCollider2D，并在鼠标进入/离开区域时派发事件，
/// 同时支持点击事件。
/// </summary>
[RequireComponent(typeof(BoxCollider2D))]
public class HoverPropagationHandler : MonoBehaviour
{
    [System.Serializable]
    public class HoverEvent : UnityEvent<GameObject> { }
    [Header("Hover Events")]
    [Tooltip("当鼠标指针进入 Collider 区域时触发")]
    public HoverEvent onHoverEnter;
    [Tooltip("当鼠标指针离开 Collider 区域时触发")]
    public HoverEvent onHoverExit;

    [Header("Click Event")]
    [Tooltip("当在 Collider 区域内检测到鼠标左键按下时触发")]
    public HoverEvent onClick;

    // 在编辑器里 Reset 时和运行时 Awake 时都保证有一个触发器类型的 BoxCollider2D
    void Reset()
    {
        EnsureBoxCollider();
    }

    void Awake()
    {
        EnsureBoxCollider();
    }

    private void EnsureBoxCollider()
    {
        var box = GetComponent<BoxCollider2D>();
        if (box == null)
            box = gameObject.AddComponent<BoxCollider2D>();

        // 我们只需要触发区域检测，不参与物理碰撞
        box.isTrigger = true;
    }

    // 当鼠标进入到有 Collider 的物体上时被调用
    void OnMouseEnter()
    {
        
        onHoverEnter?.Invoke(gameObject);
    }

    // 当鼠标离开物体时被调用
    void OnMouseExit()
    {
        onHoverExit?.Invoke(gameObject);
    }

    // 当鼠标在物体上按下（左键）时被调用
    void OnMouseDown()
    {
        // 你可以加一个 if(Input.GetMouseButtonDown(0)) 判断，默认 OnMouseDown 只响应左键
        onClick?.Invoke(gameObject);
    }
}